System.Collections.ObjectModel.ObservableCollection<T> 类

本文提供了此 API 参考文档的补充说明。

ObservableCollection<T> 类表示一个动态数据收集,该集合在添加或删除项时或刷新整个列表时提供通知。

在许多情况下,你使用的数据是对象的集合。 例如,数据绑定中的常见方案是使用ItemsControl这样的ListBoxListView记录或TreeView显示记录集合。

你可以枚举实现 IEnumerable 接口的任何集合。 但是,若要设置动态绑定,以便集合中的插入或删除操作可以自动更新 UI,则集合必须实现 INotifyCollectionChanged 接口。 此接口公开事件 CollectionChanged ,该事件应在基础集合发生更改时引发。

ObservableCollection<T> 类是实现接口的 INotifyCollectionChanged 数据收集类型。

在实现自己的集合前,请考虑使用 ObservableCollection<T> 或现有集合类之一,例如 List<T>Collection<T>BindingList<T> 等。 如果你有一个高级方案并想要实现自己的集合,请考虑使用 IList,它提供一个非泛型对象集合,这些对象可由索引单独访问。 通过 IList 数据绑定引擎实现可提供最佳性能。

注意

为了完全支持将数据值从绑定源对象传输到绑定目标,支持可绑定属性的集合中的每个对象都必须实现相应的属性更改通知机制,例如 INotifyPropertyChanged 接口。

有关详细信息,请参阅数据绑定概述中的“绑定到集合”。

XAML 用法说明

ObservableCollection<T> 可以在版本 3.0 和 3.5 中用作 Windows Presentation Foundation (WPF)中的 XAML 对象元素。 但是,使用存在实质性限制。

  • ObservableCollection<T> 必须是根元素,因为 x:TypeArguments 必须用于指定泛型 ObservableCollection<T> 约束类型的特性仅在根元素的对象元素上受支持。

  • 必须声明一个 x:Class 属性(这需要此 XAML 文件的生成操作必须是 Page 编译 XAML 的其他生成操作)。

  • ObservableCollection<T> 位于最初未映射到默认 XML 命名空间的命名空间和程序集中。 必须映射命名空间和程序集的前缀,然后在对象元素标记 ObservableCollection<T>上使用该前缀。

在应用程序中使用 ObservableCollection<T> XAML 的功能的更直接方法是声明自己的非泛型自定义集合类,该类派生自 ObservableCollection<T>,并将其约束为特定类型。 然后映射包含此类的程序集,并将其引用为 XAML 中的对象元素。